//
// Package inits 程序初始化函数
//
package inits

import (
	//"commonlib/gocaptcha"
	"fmt"
	"os"
	"strconv"
	"strings"

	"woo-server/coms/utils"
	//dbUtil "AuthManage/models/db"
)

func init() {
	// 判断是否运行test文件
	configsPath := "./configs"
	if strings.Contains(os.Args[0], "tests") {
		configsPath = "../start/configs"
	}
	var err error

	// 初始化配置文件
	if err = utils.InitConfigs(configsPath); err != nil {
		exitWhenError(err, "init config error:[%s]")
	}

	// 初始化GOMR
	dialect := utils.GetConfigValue(ConfigDBDialect)
	user := utils.GetConfigValue(ConfigDBUserName)
	pwd := utils.GetConfigValue(ConfigDBPassword)
	dbHost := utils.GetConfigValue(ConfigDBHost)
	db := utils.GetConfigValue(ConfigDBDatabase)
	charset := utils.GetConfigValue(ConfigDBCharset)
	source := fmt.Sprintf(
		"%s:%s@tcp(%s)/%s?charset=%s&parseTime=True&allowNativePasswords=true",
		user, pwd, dbHost, db, charset,
	)
	if err = utils.InitGorm(dialect, source); err != nil {
		exitWhenError(err, "init gorm error:[%s]")
	}

	// 初始化数据库
	if utils.GetConfigValue(ConfigIsDev) == "true" {
		//utils.GORM.LogMode(true) // 开启详细日志模式
		//dbUtil.DropTableIfExists() // 删除数据库表
		//dbUtil.AutoMigrate() // 更新数据库表结构
	}

	//初始化Redis Client
	raddr := utils.GetConfigValue(ConfigRedisAddr)
	rpwd := utils.GetConfigValue(ConfigRedisPassword)
	rdb := utils.GetConfigValue(ConfigRedisDB)
	rdbn, err := strconv.Atoi(rdb)
	if err != nil {
		exitWhenError(err, "parse redis db error:[%s]")
	}
	if err = utils.InitRedisClient(raddr, rpwd, rdbn); err != nil {
		exitWhenError(err, "init redis client err:[%s]")
	}

	// 初始化Logger
	logpath := utils.GetConfigValue(ConfigLogPath)
	if err = utils.InitLogger(logpath); err != nil {
		exitWhenError(err, "init gorm error:[%s]")
	}

}

func exitWhenError(err error, format string, args ...interface{}) {
	if err != nil {
		args = append(args, err)
		fmt.Printf(format, args...)
		os.Exit(-1)
	}
}
